﻿#ifndef C3POM_PORTAL
#define C3POM_PORTAL
#include<map>
#include<string>
#include<omp.h>
#include"c3pom/Object.h"
#include<queue>
class Portal_Block//类似结构体,一次可以存放一个以上的不同类型的数据,并视其为一个block
{
private:
	std::map<std::string,Object> _data;//属性值
public:
	Portal_Block();
	Object& operator[](std::string);
	Object getdata(std::string name);
	bool isreceved();
};


class Portal_Buf//缓冲区-多种实现,包括队列,堆栈,树等等------------可存放多个block,用于实现排队等待,暂存等
{
protected:
	std::map<std::string,Object> attribute;//属性值
public:
	virtual Portal_Block pop()=0;//取出数据
	virtual void push(Portal_Block){};//添加数据
	virtual ~Portal_Buf(){};
};



class Portal//缓冲区统一视图层,包含对缓存区层的全权管理,以更安全和更方便的形式实现一个缓存区服务
{
private:
	std::map<std::string,Object> attribute;//属性值
	omp_lock_t lock;
public:
	Portal();//只用于生成空的portal
	Portal(std::string);//给定条件下创建一个新Portal
	bool isnull();

	Object getattr(std::string);//获取属性值
	void push(Portal_Block);//存入数据,使用了互斥量,一定程度上保证了线程安全
	Portal_Block& pop();//取数据,使用了互斥量,一定程度上保证了线程安全

	void operator<<(Portal_Block);
	void operator>>(Portal_Block&);
	void operator=(Portal);
};

#endif
